import json
from django.http import JsonResponse
from django.forms.models import model_to_dict


# 格式化响应数据
def response_dict(data=None, message="操作成功", code=0):
    """返回统一格式的JSON响应
    
    Args:
        data: 响应数据
        message: 响应消息
        code: 响应状态码，0表示成功，非0表示失败
    
    Returns:
        JsonResponse: Django JSON响应对象
    """
    result = {
        "code": code,
        "message": message
    }
    if data is not None:
        result["data"] = data
    return JsonResponse(result)


# 获取表单验证的第一个错误
def get_first_error(form):
    """获取表单验证的第一个错误信息
    
    Args:
        form: Django表单对象
    
    Returns:
        str: 第一个错误信息
    """
    for field, errors in form.errors.items():
        if errors:
            return errors[0]
    return "表单验证失败"


# 模型转字典（OrderListV2专用）
def utils_model_to_dict(model, *args, **kwargs):
    """将OrderListV2模型对象转换为字典
    
    Args:
        model: OrderListV2模型实例
        *args: 额外参数
        **kwargs: 额外关键字参数
    
    Returns:
        dict: 转换后的字典数据
    """
    # 使用Django内置的model_to_dict函数转换基本字段
    data = model_to_dict(model)
    
    # 转换UUID类型的字段为字符串
    if hasattr(model, 'order_id'):
        data["order_id"] = str(model.order_id)

    # 处理状态
    if hasattr(model, 'status'):
        data["status"] = {
            "code": model.status,
            "name": model.get_status_display()
        }
    
    # 处理时间格式
    if kwargs.get("show_time", True):
        if hasattr(model, 'create_time'):
            data["create_time"] = model.create_time.strftime("%Y-%m-%d %H:%M:%S")
        if hasattr(model, 'update_time'):
            data["update_time"] = model.update_time.strftime("%Y-%m-%d %H:%M:%S")
    
    # 转换DecimalField为字符串以避免JSON序列化问题
    for field in model._meta.fields:
        field_name = field.name
        if field.get_internal_type() == 'DecimalField' and field_name in data:
            data[field_name] = str(data[field_name])
    
    return data